local skynet = require "skynet"
local queue = require "skynet.queue"
local snax = require "skynet.snax"

local i = 0
local hello = "hello"

function response.ping(hello)
	skynet.sleep(100)
	return hello
end

-- response.sleep and accept.hello share one lock
local lock

function accept.sleep(queue, n)
	if queue then
		lock(
		function()
			print("queue=",queue, n)
			skynet.sleep(n)
		end)
	else
		print("queue=",queue, n)
		skynet.sleep(n)
	end
end

function accept.hello()
	lock(function()
	i = i + 1
	print (i, hello)
	end)
end

function accept.exit(...)
	snax.exit(...)
end

function response.error()
	error "throw an error"
end

function init( ... )
	--使用 Snax 框架编写服务，且服务需要通过 Cluster 调用
	print ("ping server start:", ...)
	--（1）调用一次 snax.enablecluster() ，否则它无法响应 Cluster 调用，而只能接收本地调用
	--（2）需要保证调用方和提供服务的机器上都能打开 snax 脚本

	--[[
		cluster.snax(node, name, address)生成一个远程 snax 服务对象。
	]]
	snax.enablecluster()	-- enable cluster call
	-- init queue
	lock = queue() --临界区资源
end

function exit(...)
	print ("ping server exit:", ...)
end
